package main

import (
	"fmt"
	"math"
)

func main() {
	/*
		自定义错误：
	*/
	radius := -3.0
	area, err := circleArea(radius)
	if err != nil {
		fmt.Println(err)
		if err, ok := err.(*areaError); ok {
			fmt.Printf("半径是：%.2f\n", err, radius)
		}
		return
	}
	fmt.Println("圆形的面积是：", area)
}

// 1.定义一个结构体，表示错误的类型
type areaError struct {
	msg    string  //错误的描述
	radius float64 //发生错误时，圆形的半径
}

// 2.实现error接口，就是实现Error()方法
func (e *areaError) Error() string {
	return fmt.Sprint("error: 半径：%.2f，%s", e.radius, e.msg)
}

func circleArea(radius float64) (float64, error) {
	if radius < 0 {
		return 0, &areaError{"半径是非法的", radius}
	}
	return math.Pi * radius * radius, nil
}
